Librerías
# install.packages("zoo")
# install.packages("dplyr")
# install.packages("gtsummary")
# install.packages("pastecs")
# install.packages("summarytools")
# install.packages("ggplot2")
# install.packages("corrplot")
# install.packages("ggpubr")
# install.packages('openxlsx')
# install.packages('knitr')
# install.packages("plotly)
library(plotly)
library(ggpubr)
library(zoo)
library(dplyr)
library(readxl)
library(gtsummary)
library(pastecs)
library(summarytools)
library(ggplot2)
library(corrplot)
library(openxlsx)
library(knitr)
Carga de datos
Importación de los datos
# Se carga la base de datos principal
World_Data <- read_excel("data/World_Data.xlsx")
# Se clona
World_Data_2 <- World_Data
# Se carga la base de datos con los indices de felicidad
Tabla_Felicidad <- read_excel("data/DataForTable2.1 (1).xls")
Limpieza de los datos
Resumir la variable de año
Los valores que presenta la tabla de World_Data utiliza promedios que van desde el rango del 2015 al 2018, por lo que para proceder a trabajar Tabla_Felicidad, se hace un promedio de las variables agrupando con los países y se elimina la variable de año. Además, se calcula el promedio y se genera una nueva tabla únicamente con los promedios de las distintas variables
Tabla_Felicidad_2 <- Tabla_Felicidad[
Tabla_Felicidad$year >= 2015 & Tabla_Felicidad$year <= 2018,
]
Tabla_Felicidad_2 <- Tabla_Felicidad_2 %>%
group_by(`Country name`) %>%
summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)))
Tabla_Felicidad_2 <- Tabla_Felicidad_2 %>%
select(-year)
Eliminar variables repetidas
Se eliminan de World_Data_2 las variables “social_support”, “freedom” y “generosity”, esto con el fin de agregar los promedios obtenidos de Tabla_Felicidad_Reducida.
World_Data_2 <- World_Data_2 %>%
select(-social_support, -freedom, -generosity)
Mezcla de las dos bases de datos
Se unen los dos dataframes, realizando una comparación entre “country” y “Country name”, ademas se omiten los países que no cuentan con una entrada en Tabla_Felicidad_2
World_Data_3 <- merge(World_Data_2,
Tabla_Felicidad_2,
by.x = "country",
by.y = "Country name")
Limpieza NA
Se decide reemplazar los valores N/A presentes en distintas entradas por el promedio de la variable. Se van a contar los N/A después del procedimiento para asegurar de que no haya ninguno, y además se va a realizar un summary de esta. La existencia de valores N/A es debido a que no todos los países reportan todos los años a las tres entidades de las cuales se obtienen los datos, esto debido a las distintas dinámicas geo-socio-políticas que se desarrollan en las distintas divisiones geográficas del mundo, así como la calidad de las relaciones que existe entre los países, o situaciones de guerra o crisis.
promedios <- sapply(World_Data_3,
function(x) if(is.numeric(x)) mean(x, na.rm = TRUE) else NA)
for (col in names(World_Data_3)) {
World_Data_3[[col]][is.na(World_Data_3[[col]])] <- promedios[[col]]
}
colSums(is.na(World_Data_3))
## country electricity_access
## 0 0
## gdp gdp_capita
## 0 0
## labor_rate labor_force
## 0 0
## land_area life_expectancy
## 0 0
## adult_literacy water_access
## 0 0
## air_pollution population_density
## 0 0
## population alcohol_consumption
## 0 0
## unemployment_rate income_class
## 0 0
## cpi Life Ladder
## 0 0
## Log GDP per capita Social support
## 0 0
## Healthy life expectancy at birth Freedom to make life choices
## 0 0
## Generosity Perceptions of corruption
## 0 0
## Positive affect Negative affect
## 0 0
Transformación de la columna income_class
En la estructura que presenta “World_Data_3” se puede observar que cada variable va en una columna, no existe una combinación de distintas variables en la misma columna. A su vez cada observación es única y sus valores están distribuidos a lo largo de una única fila. Existe un identificador o key claro para cada una de las entradas, en este caso corresponde a la columna “country” que indica el país. Además queremos que todas las variables manejen valores numéricos, así que se va a reemplazar los valores de “income_class” por su factor, para de esta forma tener únicamente variables numéricas. Ahora lo que vamos a realizar es un análisis descriptivo completo de la tabla, la forma mas sencilla de empezar este proceso es mediante la función “summary()”, la cual permite obtener distintos estadísticos de la tabla en cuestión. Se procede a utilizar dicha función.
World_Data_3 <- World_Data_3 %>%
mutate(income_class = case_when(
income_class == "Low income" ~ 0,
income_class == "Lower middle income" ~ 1,
income_class == "Upper middle income" ~ 2,
income_class == "High income" ~ 3
))
Haciendo las columnas en formato tidy
colnames(World_Data_3) <- tolower(gsub(" ", "_", colnames(World_Data_3)))
Eliminar la columna país
Además vamos a eliminar la columna de país, ya que queremos conseguir una correlación entre las distintas variables, esta no aporta utilidad en una escala mayor.
Data_trabajar <- subset(World_Data_3, select = -country)
Análisis descriptivo
Resumen
Se obtiene un resumen de la base de datos principal sin modificar por medio de summary()
summary(World_Data)
## country electricity_access gdp gdp_capita
## Length:186 Min. : 5.15 Min. :3.624e+08 Min. : 252
## Class :character 1st Qu.: 68.75 1st Qu.:1.149e+10 1st Qu.: 2001
## Mode :character Median : 99.09 Median :4.016e+10 Median : 5788
## Mean : 82.27 Mean :4.312e+11 Mean : 13634
## 3rd Qu.:100.00 3rd Qu.:2.152e+11 3rd Qu.: 17083
## Max. :100.00 Max. :1.923e+13 Max. :109835
## NA's :1 NA's :3 NA's :3
## labor_rate labor_force land_area life_expectancy
## Min. :32.31 Min. : 36392 Min. : 300 Min. :52.19
## 1st Qu.:55.27 1st Qu.: 1292307 1st Qu.: 28050 1st Qu.:65.90
## Median :60.69 Median : 4145528 Median : 138790 Median :73.42
## Mean :60.71 Mean : 18327937 Mean : 699815 Mean :71.96
## 3rd Qu.:66.00 3rd Qu.: 12228557 3rd Qu.: 566730 3rd Qu.:77.77
## Max. :87.47 Max. :779046779 Max. :16376870 Max. :84.53
## NA's :4 NA's :4 NA's :1
## adult_literacy water_access air_pollution population_density
## Min. : 24.16 Min. : 36.08 Min. : 0.00 Min. : 1.97
## 1st Qu.: 73.22 1st Qu.: 78.12 1st Qu.: 99.46 1st Qu.: 31.36
## Median : 91.53 Median : 94.46 Median :100.00 Median : 80.49
## Mean : 82.02 Mean : 86.88 Mean : 89.97 Mean : 230.89
## 3rd Qu.: 96.84 3rd Qu.: 99.22 3rd Qu.:100.00 3rd Qu.: 187.19
## Max. :100.00 Max. :100.00 Max. :100.00 Max. :7873.79
## NA's :73 NA's :2 NA's :3 NA's :1
## population alcohol_consumption unemployment_rate social_support
## Min. :7.033e+04 Min. : 0.000 Min. : 0.143 Min. :0.3050
## 1st Qu.:2.660e+06 1st Qu.: 1.751 1st Qu.: 3.731 1st Qu.:0.7300
## Median :9.243e+06 Median : 5.096 Median : 5.710 Median :0.8220
## Mean :4.034e+07 Mean : 5.525 Mean : 7.614 Mean :0.7988
## 3rd Qu.:2.968e+07 3rd Qu.: 8.652 3rd Qu.:10.219 3rd Qu.:0.9010
## Max. :1.392e+09 Max. :16.852 Max. :26.186 Max. :0.9770
## NA's :6 NA's :4 NA's :33
## freedom generosity income_class cpi
## Min. :0.4280 Min. :-0.29100 Length:186 Min. : 9.25
## 1st Qu.:0.6930 1st Qu.:-0.11250 Class :character 1st Qu.:28.75
## Median :0.7850 Median :-0.01350 Mode :character Median :37.75
## Mean :0.7685 Mean :-0.00131 Mean :42.92
## 3rd Qu.:0.8610 3rd Qu.: 0.09650 3rd Qu.:56.59
## Max. :0.9800 Max. : 0.60600 Max. :89.25
## NA's :33 NA's :34 NA's :7
summary(Tabla_Felicidad)
## Country name year Life Ladder Log GDP per capita
## Length:2363 Min. :2005 Min. :1.281 Min. : 5.527
## Class :character 1st Qu.:2011 1st Qu.:4.647 1st Qu.: 8.506
## Mode :character Median :2015 Median :5.449 Median : 9.503
## Mean :2015 Mean :5.484 Mean : 9.400
## 3rd Qu.:2019 3rd Qu.:6.324 3rd Qu.:10.393
## Max. :2023 Max. :8.019 Max. :11.676
## NA's :28
## Social support Healthy life expectancy at birth Freedom to make life choices
## Min. :0.2282 Min. : 6.72 Min. :0.2283
## 1st Qu.:0.7438 1st Qu.:59.20 1st Qu.:0.6607
## Median :0.8344 Median :65.10 Median :0.7711
## Mean :0.8094 Mean :63.40 Mean :0.7503
## 3rd Qu.:0.9038 3rd Qu.:68.55 3rd Qu.:0.8617
## Max. :0.9873 Max. :74.60 Max. :0.9852
## NA's :13 NA's :63 NA's :36
## Generosity Perceptions of corruption Positive affect
## Min. :-0.33955 Min. :0.0352 Min. :0.1789
## 1st Qu.:-0.11194 1st Qu.:0.6868 1st Qu.:0.5720
## Median :-0.02161 Median :0.7985 Median :0.6634
## Mean : 0.00010 Mean :0.7440 Mean :0.6519
## 3rd Qu.: 0.09357 3rd Qu.:0.8676 3rd Qu.:0.7373
## Max. : 0.69957 Max. :0.9833 Max. :0.8836
## NA's :81 NA's :125 NA's :24
## Negative affect
## Min. :0.08274
## 1st Qu.:0.20856
## Median :0.26217
## Mean :0.27316
## 3rd Qu.:0.32621
## Max. :0.70459
## NA's :16
Se guarda el desc brevemente de la base de datos conjunta
write.xlsx(descr(World_Data_3),
"docs/Estadisticas_Descriptivas.xlsx", rowNames = TRUE)
Y un summary breve después de la modificación de la base de datos
summary(Data_trabajar)
## electricity_access gdp gdp_capita labor_rate
## Min. : 5.15 Min. :1.061e+09 Min. : 252 Min. :34.18
## 1st Qu.: 75.87 1st Qu.:1.475e+10 1st Qu.: 1588 1st Qu.:55.27
## Median : 99.53 Median :5.492e+10 Median : 5317 Median :60.67
## Mean : 82.99 Mean :5.199e+11 Mean : 14343 Mean :60.60
## 3rd Qu.:100.00 3rd Qu.:3.163e+11 3rd Qu.: 16579 3rd Qu.:65.85
## Max. :100.00 Max. :1.923e+13 Max. :109835 Max. :87.47
## labor_force land_area life_expectancy adult_literacy
## Min. : 202458 Min. : 300 Min. :52.19 Min. :24.16
## 1st Qu.: 2086254 1st Qu.: 54784 1st Qu.:65.83 1st Qu.:80.70
## Median : 4774402 Median : 215262 Median :73.71 Median :80.70
## Mean : 21850738 Mean : 831735 Mean :72.20 Mean :80.70
## 3rd Qu.: 13191711 3rd Qu.: 647155 3rd Qu.:78.89 3rd Qu.:94.14
## Max. :779046779 Max. :16376870 Max. :84.02 Max. :99.99
## water_access air_pollution population_density population
## Min. : 40.77 Min. : 0.00 Min. : 1.97 Min. :3.406e+05
## 1st Qu.: 80.48 1st Qu.: 97.54 1st Qu.: 34.71 1st Qu.:4.753e+06
## Median : 94.14 Median :100.00 Median : 81.35 Median :1.095e+07
## Mean : 87.40 Mean : 88.81 Mean : 211.49 Mean :4.863e+07
## 3rd Qu.: 99.31 3rd Qu.:100.00 3rd Qu.: 177.62 3rd Qu.:3.341e+07
## Max. :100.00 Max. :100.00 Max. :7873.79 Max. :1.392e+09
## alcohol_consumption unemployment_rate income_class cpi
## Min. : 0.000 Min. : 0.143 Min. :0.00 Min. : 9.25
## 1st Qu.: 1.898 1st Qu.: 3.885 1st Qu.:1.00 1st Qu.:29.50
## Median : 5.285 Median : 5.561 Median :2.00 Median :37.50
## Mean : 5.711 Mean : 7.415 Mean :1.74 Mean :43.36
## 3rd Qu.: 9.422 3rd Qu.: 9.607 3rd Qu.:3.00 3rd Qu.:56.62
## Max. :16.852 Max. :23.775 Max. :3.00 Max. :89.25
## life_ladder log_gdp_per_capita social_support
## Min. :3.084 Min. : 6.607 Min. :0.3049
## 1st Qu.:4.512 1st Qu.: 8.481 1st Qu.:0.7345
## Median :5.379 Median : 9.491 Median :0.8267
## Mean :5.402 Mean : 9.355 Mean :0.8026
## 3rd Qu.:6.172 3rd Qu.:10.286 3rd Qu.:0.9053
## Max. :7.689 Max. :11.650 Max. :0.9773
## healthy_life_expectancy_at_birth freedom_to_make_life_choices
## Min. :42.58 Min. :0.4280
## 1st Qu.:58.67 1st Qu.:0.7042
## Median :64.90 Median :0.7886
## Mean :63.30 Mean :0.7723
## 3rd Qu.:68.40 3rd Qu.:0.8622
## Max. :73.79 Max. :0.9797
## generosity perceptions_of_corruption positive_affect
## Min. :-0.294147 Min. :0.1012 Min. :0.3630
## 1st Qu.:-0.110701 1st Qu.:0.6930 1st Qu.:0.5818
## Median :-0.020626 Median :0.7822 Median :0.6792
## Mean :-0.003002 Mean :0.7346 Mean :0.6588
## 3rd Qu.: 0.085332 3rd Qu.:0.8496 3rd Qu.:0.7326
## Max. : 0.628862 Max. :0.9419 Max. :0.8284
## negative_affect
## Min. :0.1347
## 1st Qu.:0.2210
## Median :0.2847
## Mean :0.2891
## 3rd Qu.:0.3361
## Max. :0.6426
Correlaciones
Con la data estructurada de la forma adecuada, podemos empezamos a buscar la relación existente entre los distintos marcadores con respecto a nuestro variable objetivo, en este caso “life_ladder”. De la matriz de covarianza, podemos encontrar que tanta relación existe entre las distintas variables que forman la tabla, de forma que va a ser mas sencillo visualizar en que variables concentrar el estudio. Así como la de correlación, ya que al estar normalizada con valores que van desde -1 hasta 1, resulta mas sencilla observar las relaciones existentes. También se imprime el plot de correlaciones, ya que las dimensiones de Látex limitan la posibilidad de utilizar la matriz numérica.
## png
## 2
Selección de variables relevantes
Ahora que tenemos el plot de correlación, seleccionamos las variables relevantes para el estudio, así que creamos un nuevo dataframe únicamente con las variables importantes, entre las que más se relacionan.
Data_relevante = Data_trabajar %>% select (life_ladder,
electricity_access,
water_access,
income_class,
cpi,
log_gdp_per_capita)
Descripción de variables relevantes
Vamos a realizar varios estadísticos breves para las variables de importancia
life_ladder_table <- data.frame(
Valor = c(summary(Data_relevante$life_ladder),
sd(Data_trabajar$life_ladder))
)
row.names(life_ladder_table) <- c("Mínimo",
"1° Cuartil",
"Mediana",
"Media",
"3° Cuartil",
"Máximo",
"Desviación Estándar")
print(life_ladder_table)
## Valor
## Mínimo 3.084462
## 1° Cuartil 4.511908
## Mediana 5.378752
## Media 5.402009
## 3° Cuartil 6.172230
## Máximo 7.688532
## Desviación Estándar 1.121033
log_gdp_table <- data.frame(
Valor = c(summary(Data_relevante$log_gdp_per_capita),
sd(Data_trabajar$log_gdp_per_capita))
)
row.names(log_gdp_table) <- c("Mínimo",
"1° Cuartil",
"Mediana",
"Media",
"3° Cuartil",
"Máximo",
"Desviación Estándar")
print(log_gdp_table)
## Valor
## Mínimo 6.607256
## 1° Cuartil 8.481271
## Mediana 9.491440
## Media 9.355073
## 3° Cuartil 10.286450
## Máximo 11.649626
## Desviación Estándar 1.204099
Y las guardamos
write.xlsx(life_ladder_table, "docs/life_ladder_table.xlsx", rowNames = TRUE)
write.xlsx(log_gdp_table, "docs/log_gdp_table.xlsx", rowNames = TRUE)
Ajuste completo del modelo
Coeficiente de Correlación de Pearson
Se van a desarrollar gráficos con el fin de estudiar el comportamiento de los datos selectos, además se agrega el coeficiente de correlación de Pearson para tener claro el nivel de relación existente entre las variables, además se calcula el valor-p el cual nos permite realizar pruebas de hipótesis, en este caso establecer una correlación, en caso de ser menor al usual 0.05 aceptamos la correlación obtenida.
Con valores de p inferiores al 0.05 en todos los casos se acepta la hipótesis de que existe una correlación positiva entre los distintos marcadores del progreso socioeconómico (1) log_gdp_per_capita, (2) electricity_access, (3) water_access, (4) cpi, con respecto a la variable de estudio life_ladder
Correlaciones y Shapiro test
Métodos de Pearson, Kendall y Spearman
Obtenemos la correlación utilizando distintos métodos, en este caso Pearson, Kendall y Spearman, vamos a concentrarnos en Pearson, pero los otros métodos nos permite tener una idea mas clara del comportamiento de los datos.
res <- cor.test(Data_relevante$log_gdp_per_capita,
Data_relevante$life_ladder,
method=c("pearson", "kendall", "spearman"))
print(paste("Valor-p: ",res$p.value))
## [1] "Valor-p: 4.71548398573945e-35"
print(paste("correlación:", res$estimate))
## [1] "correlación: 0.809060910646787"
Prueba de normalidad Shapiro-Wilk de las variables
shapiro.test(Data_relevante$life_ladder)
##
## Shapiro-Wilk normality test
##
## data: Data_relevante$life_ladder
## W = 0.98235, p-value = 0.05742
shapiro.test(Data_relevante$log_gdp_per_capita)
##
## Shapiro-Wilk normality test
##
## data: Data_relevante$log_gdp_per_capita
## W = 0.96765, p-value = 0.001597
Gráficos relevantes a la prueba anterior
qqplots_a <- ggqqplot(Data_relevante$life_ladder,
ylab = "life_ladder") +
labs(title = "Gráfico de cuantiles de life_ladder") +
theme_minimal() +
ylim(0, 10) +
geom_qq(colour = "mediumseagreen")
qqplots_b <- ggqqplot(Data_relevante$log_gdp_per_capita,
ylab = "life_ladder") +
labs(title = "Gráfico de cuantiles de log_gdp_per_capita") +
theme_minimal() +
ylim(0, 15) +
geom_qq(colour = "#006400")
# A nivel interactivo, plotly ayuda al html. No sirve para el documento formal.
qqplots_a %>% ggplotly()
qqplots_b %>% ggplotly()
ggsave("docs/terceros_graficos/qqp_life.pdf", plot = qqplots_a, limitsize = FALSE)
## Saving 8 x 5 in image
ggsave("docs/terceros_graficos/qqp_lgdp.pdf", plot = qqplots_b, limitsize = FALSE)
## Saving 8 x 5 in image
En los gráficos se puede apreciar la forma en la que se distribuye las distribuciones y su relación con una distribución normal
Método Delta Multivariable y Transformación Z de Fisher
Para cada uno de los predictores siguientes se decide realizar el calculo de la covarianza y varianzas requeridas para obtener la correlación, además de esto se obtiene el coeficiente de regresión. Seguido de esto se realiza la transformación Z de Fisher para calcular los intervalos de confianza de la correlación obtenida.
Función a aplicar a todas las variables
relacionar <- function(var){
Y <- Data_relevante$life_ladder
X <- Data_relevante[[var]]
XY <- X*Y
X_2 <- X*X
n <- length(Data_relevante$life_ladder)
# Covarianza y varianzas
valor_cov <- cov(X, Y)
var_X <- var(X)
var_Y <- var(Y)
# Correlación
cor = valor_cov/(sqrt(var_X * var_Y))
# Promedios
XY_promedio <- mean(XY)
X_promedio <- mean(X)
Y_promedio <- mean(Y)
X_2_promedio <- mean(X_2)
rn <- (XY_promedio - X_promedio * Y_promedio) / (sqrt(X_2_promedio - X_promedio^2))
# Función g, del método delta
funcion_g <- tan(cor)
funcion_g_prima <- 1/(1-cor^2)
# TLC
tlc <- sqrt(n) * (rn - cor) * funcion_g_prima
# Transformación de Fisher
z = funcion_g
sd_z <- 1 / sqrt(n - 3)
z_conf_int <- z + c(-1, 1) * qnorm(0.975, mean = 0, sd = 1) * sd_z
cor_conf_int <- (exp(2 * z_conf_int) - 1) / (exp(2 * z_conf_int) + 1)
tabla <- data.frame(
"Predictor" = var,
"Correlación" = cor,
"Coeficiente de Regresión" = rn,
"IC Inferior Correlación" = cor_conf_int[1],
"IC Superior Correlación" = cor_conf_int[2]
)
return(tabla)
}
Realizando la tabla de resultados
Tabla_Resultados <- rbind(
relacionar("log_gdp_per_capita"),
relacionar("electricity_access"),
relacionar("water_access"),
relacionar("cpi")
)
print(Tabla_Resultados)
## Predictor Correlación Coeficiente.de.Regresión
## 1 log_gdp_per_capita 0.8090609 0.9038724
## 2 electricity_access 0.6689585 0.7473518
## 3 water_access 0.7063771 0.7891554
## 4 cpi 0.7184491 0.8026421
## IC.Inferior.Correlación IC.Superior.Correlación
## 1 0.7087070 0.8373926
## 2 0.5557480 0.7417959
## 3 0.5975631 0.7687028
## 4 0.6109447 0.7771874
Se crea una tabla de resultados con el fin de poder analizar los resultados obtenidas de forma sencilla y agrupada, se puede observar que los coeficientes de correlación presentan un alto grado de relación con respecto a la variable de estudio, además de encontrarse presentes en el rango del Intervalo de Confianza. Lo que se quería demostrar era la relación existente entre los marcadores socio-económicos y el indice de Felicidad, con los resultados obtenidos podemos afirmar que existe una relación positiva.
Análisis de diagnósticos del Modelo
Residuales
Se crea un modelo de regresión lineal entra las variables predictoras y la predecida con el fin de obtener los residuales y evaluar la efectividad del método Shapiro-Wilks
modelo_gdp <- lm(life_ladder ~ log_gdp_per_capita, data = Data_relevante)
modelo_electricity <- lm(life_ladder ~ electricity_access, data = Data_relevante)
modelo_water <- lm(life_ladder ~ water_access, data = Data_relevante)
modelo_cpi <- lm(life_ladder ~ cpi, data = Data_relevante)
Los gráficos nos permiten estudiar el comportamiento de distintos parámetros de los modelos:
Residuals vs Fitted: Nos permite detectar problemas de no linealidad, heterocedasticidad o outliers
Normal Q-Q: Permite evaluar la normalidad de los residuales
Scale-Location: Verifica la homocedasticidad
Residuals vs Leverage: Identifica puntos influyentes
par(mfrow = c(2, 2))
plot(modelo_gdp)
plot(modelo_electricity)
plot(modelo_water)
plot(modelo_cpi)
A su vez el test de normalidad de Shapiro-Wilk de los residuos nos permite observar si se da un comportamiento Normal de los residuos.
shapiro.test(resid(modelo_gdp))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_gdp)
## W = 0.98599, p-value = 0.1461
shapiro.test(resid(modelo_electricity))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_electricity)
## W = 0.99002, p-value = 0.3875
shapiro.test(resid(modelo_water))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_water)
## W = 0.99235, p-value = 0.6237
shapiro.test(resid(modelo_cpi))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_cpi)
## W = 0.98324, p-value = 0.07216
Normalización
Vamos a normalizar el comportamiento de la variable life_ladder, mediante el uso del Teorema del Límite Central
Y <- Data_relevante$life_ladder
ystd <- data.frame(norm = (Y - mean(Y))/sd(Y))
std <- ggplot(ystd, aes(x = norm)) +
geom_histogram(aes(y = after_stat(density), fill = "Histograma"),
color = "black", bins = 30) +
geom_density(aes(fill = "Densidad"),
color = "royalblue",
alpha = 0.4) +
geom_function(fun = dnorm,
aes(color = "Normal(0,1)"),
linewidth = 1.5,
alpha = 0.5) +
labs(title = "Histograma de life_ladder estandarizada ",
x = "Valores",
y = "Densidad",
color = " ",
fill = " ") +
scale_fill_manual(values = c("blue", "lightblue")) +
scale_color_manual(values = c("darkorange3")) +
xlim(-3,3) +
theme_minimal() +
theme(legend.position = 'bottom')
std %>% ggplotly()